// 导入instance 的 axios实例
import instance from './mock'

// 定义一个get请求方法
const get = (url, params) => {
  return instance({
    url,
    method: 'get',
    params
  })
}

// 定义一个post请求方法
const post = (url, data) => {
  return instance({
    url,
    method: 'post',
    data
  })
}

// 定义一个jsonp 请求类型方法
const jsonp = (url, params) => {
  if (!url) {
    throw new Error('jsonp方法必须传入url地址参数！')
  }
  // jsonp 原理：创建script标签，设置src ,设置回调函数

  // 处理查询字符串
  var qs = ''
  for (key in params) {
    qs += '&' + key + '=' + params[key]
  }
  qs = qs.slice(1)

  // 准备引入地址
  let pathUrl = url + (url.indexOf('?') >= 0 ? '' : '?') + qs

  const callback = 'jsonpCallback' + Date.now() // 生成回调函数的名字
  pathUrl += '&callback=' + callback

  return new Promise((resolve, reject) => {
    console.log(pathUrl, qs)
    // 准备回调函数 全局 ，在请求成功之前的回调
    window[callback] = (result) => {
      resolve(result)
    }

    // 创建src标签
    let script = document.createElement('script')
    script.src = pathUrl
    document.head.appendChild(script)
    // script 中的引用内容加载完毕之后 ，销毁标签
    script.onload = function () {
      document.head.removeChild(this)
    }
  })
}

// 定义一个登录方法
const login = (url, data) => {
  return instance({
    url,
    method: 'post',
    data
  })
}

export default {
  get,
  post,
  jsonp,
  login
}
